#!/usr/bin/env python
#coding:utf-8

import time, datetime
import threading

def worker(a_tid, a_account):
    global g_mutex
    print "Str", a_tid, datetime.datetime.now()
    for i in range(10000000):
        g_mutex.acquire()
        a_account.deposite(1)
        g_mutex.release()

    print "End", a_tid, datetime.datetime.now()

class Account:
    def __init__(self, a_base):
        self.m_amount = a_base

        def deposite(self, a_amount):
            self.m_amount += a_amount

        def withdraw(self, a_amount):
            self.m_amount -= a_amount

if __name__ == '__main__':
    global g_mutex
    count = 0
    dstart = datetime.datetime.now()
    print 'Main Thread Start At:', dstart

    #init thread_pool

    thread_pool = []
    #init mutex
    g_mutex = threading.Lock()
    #init thread items
    acc = Account(100)
    for i in range(10):
        th = threading.Thread(target=worker, args=(i, acc))
        thread_pool.append(th)

    for i in range(10):
        thread_pool[i].start()

    for i in range(10):
        threading.Thread.join(thread_pool[i])
    dend = datetime.datetime.now()
    print "Count=", acc.m_amount
    print "Main Thread End At:", dend, "time span", dend-dstart
